package com.atguigu.aiproject.config;

import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.redisson.config.SingleServerConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.StringUtils;

@Configuration
public class RedissonConfig {
    @Value("${spring.data.redis.host}")
    private String host;
    @Value("${spring.data.redis.port}")
    private int port;
    @Value("${spring.data.redis.database}")
    private int database;
    @Value("${spring.data.redis.password}")
    private String password;
    @Bean
    public RedissonClient redissonClient() {

        // 创建配置对象
        Config config = new Config();

        // 1. 单机模式配置)
        SingleServerConfig singleServerConfig = config.useSingleServer();
        singleServerConfig.setAddress("redis://" + host + ":" + port); // 地址
        singleServerConfig.setDatabase(database); // 数据库
        singleServerConfig.setConnectionPoolSize(32); // 连接池大小
        singleServerConfig.setIdleConnectionTimeout(10000); // 空闲超时
        if (StringUtils.hasText(password)) {
            singleServerConfig.setPassword(password);
        }

        // 2. 集群模式配置（替换单机模式）
        // ClusterServersConfig clusterConfig = config.useClusterServers();
        // clusterConfig.addNodeAddress("redis://192.168.1.101:6379", "redis://192.168.1.102:6379");
        // clusterConfig.setPassword("123456");

        // 3. 哨兵模式配置（替换单机模式）
        // SentinelServersConfig sentinelConfig = config.useSentinelServers();
        // sentinelConfig.setMasterName("mymaster");
        // sentinelConfig.addSentinelAddress("redis://192.168.1.201:26379");

        // 高级配置：自定义序列化（默认是Jackson，可改为FastJson2等）
        // config.setCodec(new FastJson2Codec());

        return Redisson.create(config);
    }
}
